#include <bits/stdc++.h>
using namespace std;

int n;
struct ty {
    int x, y, s;
};
vector<ty> a;

bool check(double v) {
    double t = 0;  // 当前时间（从0出发）
    for (int i = 0; i < n; i++) {
        // 计算到达当前电塔的最早可能时间（按最大速度v行驶）
        t = max(static_cast<double>(a[i].x), t + a[i].s / v);
        // 若超过巡检最晚时间则速度v不可行
        if (t > a[i].y) return false;
    }
    return true;
}

void solve() {
    cin >> n;
    a.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i].x >> a[i].y >> a[i].s;
    }

    double l = 1e-7;  // 最小速度边界（避免除0）
    double r = 1e14;  // 最大速度边界（足够大）
    double ans = r;   // 初始化答案为最大速度

    // 浮点数二分：迭代100次确保精度
    for (int iter = 0; iter < 100; iter++) {
        double mid = (l + r) * 0.5;
        if (check(mid)) {
            ans = mid;  // 当前速度可行，尝试更小速度
            r = mid;
        } else {
            l = mid;
        }
    }

    printf("%.2f\n", ans);  // 保留两位小数
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    solve();
    return 0;
}